package ig.metrica.aplicacion;
import ig.da.abs.AbstractBasicDTO;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.Date;

/**
 * 
 * @author usuario
 *
 * Is an Class for Aplicacion table
 *  $metadata.get($index).description
 */

public class AplicacionDTO extends AbstractBasicDTO implements java.io.Serializable, java.lang.Comparable {


	// -----------------------------------------------------------------
	// Constants
	// -----------------------------------------------------------------

	// -----------------------------------------------------------------
	// Attributes
	// -----------------------------------------------------------------
      protected Integer idaplicacion;
      protected String nombre;
      protected String version;
      protected Date fechactualizacion;

	// -----------------------------------------------------------------
	// Constructors
	// -----------------------------------------------------------------
       public AplicacionDTO()
       {
       }

       public AplicacionDTO(  Integer idaplicacion, String nombre, String version, Date fechactualizacion )
       {
          this.idaplicacion = idaplicacion;
          this.nombre = nombre;
          this.version = version;
          this.fechactualizacion = fechactualizacion;
       }

	// -----------------------------------------------------------------
	// Methods get/set
	// -----------------------------------------------------------------

      /**
       * Return value for Idaplicacion
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       */
      public Integer getIdaplicacion ()
      {
         return this.idaplicacion;
      }

      /**
       * Set value for  Idaplicacion
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       *
       */
      public void setIdaplicacion ( Integer idaplicacion )
      {
         this.idaplicacion = idaplicacion;
      }

      /**
       * Return value for Nombre
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       */
      public String getNombre ()
      {
         return this.nombre;
      }

      /**
       * Set value for  Nombre
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       *
       */
      public void setNombre ( String nombre )
      {
         this.nombre = nombre;
      }

      /**
       * Return value for Version
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       */
      public String getVersion ()
      {
         return this.version;
      }

      /**
       * Set value for  Version
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       *
       */
      public void setVersion ( String version )
      {
         this.version = version;
      }

      /**
       * Return value for Fechactualizacion
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       */
      public Date getFechactualizacion ()
      {
         return this.fechactualizacion;
      }

      /**
       * Set value for  Fechactualizacion
       *
       * $metadata.get($index).columsByIndex.get($indexColumn).description
       *
       */
      public void setFechactualizacion ( Date fechactualizacion )
      {
         this.fechactualizacion = fechactualizacion;
      }


	// -----------------------------------------------------------------
	// Method getPk
	// -----------------------------------------------------------------
    /**
     * El pk
     *
     */
     public Integer getPk()
     {
        return idaplicacion;
     }

    /**
    *
    * The set Pk
    *
    */
     public void setPk(  Integer idaplicacion ) {

        this.idaplicacion=idaplicacion;
        
     }


	// -----------------------------------------------------------------
	// Method compareTo
	// -----------------------------------------------------------------
    /**
     * CompareTo
     * @param o
     */
    public int compareTo(Object o)
    {
        return ((AplicacionDTO)o).getIdaplicacion().compareTo(this.idaplicacion);
    }


	// -----------------------------------------------------------------
	// Method copyFrom
	// -----------------------------------------------------------------
    /**
     * Cada uno de los atributos del objeto que llega lo copia en los atributos locales
     * @param o : el objeto fuente
     */
    public void copyFrom(Object o) {
        Object obj[] = new Object[0];
        Method methods[] = o.getClass().getMethods();
        for (int i = 0; i < methods.length; i++) {
            try {
                String methodName = methods[i].getName();
                if ((methodName.startsWith("get") || methodName.startsWith("is")) && Modifier.isPublic(methods[i].getModifiers()) && methods[i].getParameterTypes().length == 0 && !methodName.equals("getClass")) {
                    String setMethodName = methodName.replaceFirst(methodName.startsWith("get") ? "get" : "is", "set");
                    getClass().getMethod(setMethodName, new Class[]{
                                methods[i].getReturnType()
                            }).invoke(this, new Object[]{
                                methods[i].invoke(o, obj)
                            });
                }
            } catch (IllegalAccessException ilE) {
                ilE.printStackTrace();
            } catch (InvocationTargetException invE) {
                invE.printStackTrace();
            } catch (NoSuchMethodException noE) {
            }
        }
    }

	// -----------------------------------------------------------------
	// Method copyTo
	// -----------------------------------------------------------------
    /**
     * Cada uno de los atributos locales los copia en los atributos del objeto que llega
     * @param o: objeto 
     */
    public void copyTo(Object o) {
        Object obj[] = new Object[0];
        Method methods[] = o.getClass().getMethods();
        for (int i = 0; i < methods.length; i++) {
            try {
                String methodName = methods[i].getName();
                if ((methodName.startsWith("get") || methodName.startsWith("is")) && Modifier.isPublic(methods[i].getModifiers()) && methods[i].getParameterTypes().length == 0 && !methodName.equals("getClass")) {
                    String setMethodName = methodName.replaceFirst(methodName.startsWith("get") ? "get" : "is", "set");
                    o.getClass().getMethod(setMethodName, new Class[]{
                                methods[i].getReturnType()
                            }).invoke(o, new Object[]{
                                methods[i].invoke(this, obj)
                            });
                }
            } catch (IllegalAccessException ilE) {
                ilE.printStackTrace();
            } catch (InvocationTargetException invE) {
                invE.printStackTrace();
            } catch (NoSuchMethodException noE) {
            }
        }
    }
    
    public Integer getIntVersion(){
        return Integer.valueOf( (version.replace(".","")+"0000000000").substring(0,6) );
    }    
}
